// pages/settings/settings.js
const app = getApp()

Page({
  data: {
    mqttHost: '218.244.140.203',
    mqttPort: 8083,
    mqttSubscribeTopic: 'McuToClient',     // 订阅主题
    mqttPublishTopic: 'qtmqtt/topic1',     // 发布主题
    tempMax: 30,
    tempMin: 10,
    humidMax: 60,
    humidMin: 30,
    foodAmount: 0  // 食物量
  },

  onLoad() {
    this.loadSettings()
  },

  onShow() {
    this.loadSettings()
  },

  // 加载设置
  loadSettings() {
    const mqttConfig = app.globalData.mqttConfig
    const deviceData = app.globalData.deviceData
    
    this.setData({
      mqttHost: mqttConfig.host,
      mqttPort: mqttConfig.port,
      mqttSubscribeTopic: mqttConfig.subscribeTopic,  // 订阅主题
      mqttPublishTopic: mqttConfig.publishTopic,      // 发布主题
      tempMax: deviceData.tempThresholdMax,
      tempMin: deviceData.tempThresholdMin,
      humidMax: deviceData.humidThresholdMax,
      humidMin: deviceData.humidThresholdMin,
      foodAmount: deviceData.foodAmount  // 加载食物量
    })
  },

  // MQTT配置输入
  onHostInput(e) {
    this.setData({
      mqttHost: e.detail.value
    })
  },

  onPortInput(e) {
    const value = e.detail.value
    this.setData({
      mqttPort: value === '' ? '' : parseInt(value)
    })
  },

  onSubscribeTopicInput(e) {
    this.setData({
      mqttSubscribeTopic: e.detail.value
    })
  },

  onPublishTopicInput(e) {
    this.setData({
      mqttPublishTopic: e.detail.value
    })
  },

  // 保存MQTT配置
  onSaveConfig() {
    if (!this.data.mqttHost) {
      wx.showToast({
        title: '请输入服务器地址',
        icon: 'none'
      })
      return
    }

    if (!this.data.mqttPort || this.data.mqttPort === '') {
      wx.showToast({
        title: '请输入端口号',
        icon: 'none'
      })
      return
    }

    if (!this.data.mqttSubscribeTopic) {
      wx.showToast({
        title: '请输入订阅主题',
        icon: 'none'
      })
      return
    }

    if (!this.data.mqttPublishTopic) {
      wx.showToast({
        title: '请输入发布主题',
        icon: 'none'
      })
      return
    }

    wx.showLoading({
      title: '保存中...'
    })

    // 保存到全局配置
    app.globalData.mqttConfig.host = this.data.mqttHost
    app.globalData.mqttConfig.port = this.data.mqttPort
    app.globalData.mqttConfig.subscribeTopic = this.data.mqttSubscribeTopic
    app.globalData.mqttConfig.publishTopic = this.data.mqttPublishTopic
    
    app.saveConfig()

    setTimeout(() => {
      wx.hideLoading()
      wx.showToast({
        title: '保存成功，请重启小程序生效',
        icon: 'success',
        duration: 2000
      })
    }, 500)
  },

  // 温度阈值输入
  onTempMaxInput(e) {
    const value = e.detail.value
    this.setData({
      tempMax: value === '' ? '' : parseFloat(value)
    })
  },

  onTempMinInput(e) {
    const value = e.detail.value
    this.setData({
      tempMin: value === '' ? '' : parseFloat(value)
    })
  },

  // 保存温度阈值
  onSaveTempThreshold() {
    if (this.data.tempMax === '' || this.data.tempMin === '') {
      wx.showToast({
        title: '请输入温度阈值',
        icon: 'none',
        duration: 2000
      })
      return
    }
    
    if (this.data.tempMin >= this.data.tempMax) {
      wx.showToast({
        title: '最低温度必须小于最高温度',
        icon: 'none',
        duration: 2000
      })
      return
    }

    wx.showLoading({
      title: '保存中...'
    })

    app.globalData.deviceData.tempThresholdMax = this.data.tempMax
    app.globalData.deviceData.tempThresholdMin = this.data.tempMin
    app.saveConfig()
    
    // 发送MQTT消息（所有字段都为数字类型）
    const deviceData = app.globalData.deviceData
    const message = {
      fd: parseInt(deviceData.deviceFd) || 0,  // 设备fd转为int
      Tem_max: this.data.tempMax,              // 数字类型
      Tem_min: this.data.tempMin,              // 数字类型
      Hum_max: deviceData.humidThresholdMax,   // 数字类型
      Hum_min: deviceData.humidThresholdMin,   // 数字类型
      food: deviceData.foodAmount              // 数字类型
    }
    
    app.sendMQTTMessage(message).then(() => {
      wx.hideLoading()
      wx.showToast({
        title: '保存并发送成功',
        icon: 'success'
      })
    }).catch(() => {
      wx.hideLoading()
      wx.showToast({
        title: '保存成功（MQTT未连接）',
        icon: 'none'
      })
    })
  },

  // 湿度阈值输入
  onHumidMaxInput(e) {
    const value = e.detail.value
    this.setData({
      humidMax: value === '' ? '' : parseFloat(value)
    })
  },

  onHumidMinInput(e) {
    const value = e.detail.value
    this.setData({
      humidMin: value === '' ? '' : parseFloat(value)
    })
  },

  // 保存湿度阈值
  onSaveHumidThreshold() {
    if (this.data.humidMax === '' || this.data.humidMin === '') {
      wx.showToast({
        title: '请输入湿度阈值',
        icon: 'none',
        duration: 2000
      })
      return
    }
    
    if (this.data.humidMin >= this.data.humidMax) {
      wx.showToast({
        title: '最低湿度必须小于最高湿度',
        icon: 'none',
        duration: 2000
      })
      return
    }

    wx.showLoading({
      title: '保存中...'
    })

    app.globalData.deviceData.humidThresholdMax = this.data.humidMax
    app.globalData.deviceData.humidThresholdMin = this.data.humidMin
    app.saveConfig()
    
    // 发送MQTT消息（所有字段都为数字类型）
    const deviceData = app.globalData.deviceData
    const message = {
      fd: parseInt(deviceData.deviceFd) || 0,  // 设备fd转为int
      Tem_max: deviceData.tempThresholdMax,    // 数字类型
      Tem_min: deviceData.tempThresholdMin,    // 数字类型
      Hum_max: this.data.humidMax,             // 数字类型
      Hum_min: this.data.humidMin,             // 数字类型
      food: deviceData.foodAmount              // 数字类型
    }
    
    app.sendMQTTMessage(message).then(() => {
      wx.hideLoading()
      wx.showToast({
        title: '保存并发送成功',
        icon: 'success'
      })
    }).catch(() => {
      wx.hideLoading()
      wx.showToast({
        title: '保存成功（MQTT未连接）',
        icon: 'none'
      })
    })
  },

  // 食物量输入
  onFoodAmountInput(e) {
    const value = e.detail.value
    this.setData({
      foodAmount: value === '' ? '' : parseInt(value)
    })
  },

  // 保存食物量
  onSaveFoodAmount() {
    if (this.data.foodAmount === '' || this.data.foodAmount < 0) {
      wx.showToast({
        title: '请输入有效的食物量',
        icon: 'none',
        duration: 2000
      })
      return
    }

    wx.showLoading({
      title: '保存中...'
    })

    app.globalData.deviceData.foodAmount = this.data.foodAmount
    app.saveConfig()
    
    // 发送MQTT消息（所有字段都为数字类型）
    const deviceData = app.globalData.deviceData
    const message = {
      fd: parseInt(deviceData.deviceFd) || 0,  // 设备fd转为int
      Tem_max: deviceData.tempThresholdMax,    // 数字类型
      Tem_min: deviceData.tempThresholdMin,    // 数字类型
      Hum_max: deviceData.humidThresholdMax,   // 数字类型
      Hum_min: deviceData.humidThresholdMin,   // 数字类型
      food: this.data.foodAmount               // 数字类型
    }
    
    app.sendMQTTMessage(message).then(() => {
      wx.hideLoading()
      wx.showToast({
        title: '保存并发送成功',
        icon: 'success'
      })
    }).catch(() => {
      wx.hideLoading()
      wx.showToast({
        title: '保存成功（MQTT未连接）',
        icon: 'none'
      })
    })
  },

  // 清除历史数据
  onClearHistory() {
    wx.showModal({
      title: '确认清除',
      content: '确定要清除所有历史数据吗？此操作不可恢复。',
      success: (res) => {
        if (res.confirm) {
          // 清空历史数据
          app.globalData.temperatureHistory = []
          app.globalData.humidityHistory = []
          
          wx.showToast({
            title: '清除成功',
            icon: 'success'
          })
        }
      }
    })
  },

  // 导出数据
  onExportData() {
    wx.showLoading({
      title: '导出中...'
    })

    // 准备导出数据
    const exportData = {
      deviceData: app.globalData.deviceData,
      temperatureHistory: app.globalData.temperatureHistory,
      humidityHistory: app.globalData.humidityHistory,
      mqttConfig: app.globalData.mqttConfig,
      exportTime: new Date().toLocaleString('zh-CN')
    }

    // 在实际应用中，这里应该调用服务器API或使用文件系统API
    console.log('导出数据:', exportData)

    setTimeout(() => {
      wx.hideLoading()
      wx.showModal({
        title: '导出成功',
        content: '数据已导出到日志，可在控制台查看。实际应用中可导出为文件。',
        showCancel: false
      })
    }, 1000)
  },

  // 通知开关
  onNotificationChange(e) {
    const checked = e.detail.value
    this.setData({
      notification: checked
    })
    
    wx.setStorageSync('notification', checked)
    
    wx.showToast({
      title: checked ? '已开启通知' : '已关闭通知',
      icon: 'success'
    })
  },

  // 自动刷新开关
  onAutoRefreshChange(e) {
    const checked = e.detail.value
    this.setData({
      autoRefresh: checked
    })
    
    wx.setStorageSync('autoRefresh', checked)
    
    wx.showToast({
      title: checked ? '已开启自动刷新' : '已关闭自动刷新',
      icon: 'success'
    })
  },

  // 恢复默认设置
  onResetAll() {
    wx.showModal({
      title: '确认重置',
      content: '确定要恢复所有默认设置吗？此操作不可恢复。',
      confirmText: '确定重置',
      confirmColor: '#ff4d4f',
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({
            title: '重置中...'
          })

          // 重置所有配置
          app.globalData.mqttConfig = {
            host: '218.244.140.203',
            port: 8083,
            subscribeTopic: 'McuToClient',
            publishTopic: 'qtmqtt/topic1'
          }
          
          app.globalData.deviceData.tempThresholdMax = 30
          app.globalData.deviceData.tempThresholdMin = 10
          app.globalData.deviceData.humidThresholdMax = 60
          app.globalData.deviceData.humidThresholdMin = 30
          
          app.saveConfig()
          
          wx.setStorageSync('notification', true)
          wx.setStorageSync('autoRefresh', false)
          
          this.setData({
            mqttHost: '218.244.140.203',
            mqttPort: 8083,
            mqttSubscribeTopic: 'McuToClient',
            mqttPublishTopic: 'qtmqtt/topic1',
            tempMax: 30,
            tempMin: 10,
            humidMax: 60,
            humidMin: 30,
            notification: true,
            autoRefresh: false
          })

          setTimeout(() => {
            wx.hideLoading()
            wx.showToast({
              title: '重置成功',
              icon: 'success'
            })
          }, 1000)
        }
      }
    })
  }
})

